// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLObjectImpl;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.Collections;
// import java.util.List;
#pragma once
#include "../../../../ast/SQLObjectImpl.h"
#include "OracleExpr.h"

class OracleAnalyticWindowing_Type
{
public:
  static OracleAnalyticWindowing_Type_ptr ROWS;
  static OracleAnalyticWindowing_Type_ptr RANGE;

  string_ptr name;
  uint64_t mask;

  OracleAnalyticWindowing_Type(uint64_t mask, string_ptr name);
};

class OracleAnalyticWindowing : virtual public SQLObjectImpl, virtual public OracleExpr
{
public:
  OracleAnalyticWindowing_Type_ptr type;
  SQLExpr_ptr expr;

  OracleAnalyticWindowing();
  SHAREDOBJECT(OracleAnalyticWindowing);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(OracleASTVisitor_ptr visitor);

  SQLExpr_ptr getExpr();

  void setExpr(SQLExpr_ptr expr);

  OracleAnalyticWindowing_Type_ptr getType();

  void setType(OracleAnalyticWindowing_Type_ptr type);

  // @Override
  SQLObject_ptr clone();

  // @Override
  SQLObject_list_ptr getChildren();
};
